﻿// Inner Kit 通用工具库
// 索引分配器
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 所属层级：基础结构层（1）
// 非常简单的一个Gadget。用于分配索引，重置索引。
// 之所以用小写命名，因为要和std,eastl这类有点同步，感觉有点“所属系统”的感觉。
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-04-14

#pragma once

namespace ikit {

struct index_allocator {
  index_allocator() : index(0) {}
  ~index_allocator() = default;

  // 重置索引值
  void reset() { index = 0; }

  // 分配一个，返回当前索引（未改变前）
  int allocate() {
    int idx = index++;
    return idx;
  }

  // 分配N个，返回当前索引（未改变前）
  int count(int number) {
    int idx = index;
    index += number;
    return idx;
  }

  // 得到当前的大小（也相当于索引值）
  int size() const { return index; }

private:
  int index;
};

} // namespace ikit